Computing systems have become a critical component for success for nearly all businesses. In order to equip themselves with the needed computing resources, many businesses have deployed their own increasingly large and complex computing systems. However, these deployments require large upfront expenditures on computing infrastructure, such as, physical computer servers, physical networks, and physical storage, as well as, virtual servers, virtual networks, and virtual storage. Additionally, these deployments require continued expenditures on maintenance of the infrastructure.
Allocating resources for these computing expenditures becomes more vexing to businesses by the fact that these expenditures are often unpredictable. Expenditures on computing infrastructure often fail to deliver the promised performance. Furthermore, even when the promised performance is realized, the estimated demand for computing resources may have been inaccurate.
Where the demand was underestimated, outages and related expenses are likely to occur. And, the business must quickly make another investment in computing infrastructure in order to stop the outages. On the other hand, where the demand was overestimated, the business has made a large investment in rapidly depreciating infrastructure that is being unused or underutilized. The problem with estimating demand is further complicated by the reality that demand often fluctuates widely and, in certain cases, with little predictability.
Cloud computing, which is also known as utility computing or managed virtual servers, is a method for providing computing resources to customers that attempts to reduce or eliminate many of the costs associated with traditional deployments of computing systems. In cloud computing, the computing infrastructure is generally provided by a third-party provider, although, in certain instances the third-party provider can be the customer. The customer uses the provider's computing infrastructure in lieu of or in addition to their own.
Unlike systems where the customer owns the computing infrastructure and must make large upfront expenditures, cloud computing is usually billed on a subscription or pay-as-you-go basis. This model allows cloud computing customers to buy computing resources only when they need them, eliminating many of the earlier-discussed problems with estimating the demand and performance of a system. Further, the infrastructure is generally controlled and managed by the provider. As a result, the customer need not have the same level of in-house expertise that would otherwise be required if they were controlling and managing the infrastructure.
As an example—a business owner may want to analyze his or her sales transactions over the past year in order to find patterns and associations between products. For instance, it may be the case that when the business owner sells product A they also tend to sell product B. Software exists and is readily available that can find such a pattern, which can then be leveraged to the advantage of the business owner. However, this type of data mining can be processor intensive, and may take too long using the processing power available in the business-owner's infrastructure. Further, the expense and complexity of deploying a more powerful private infrastructure will likely exceed the benefit realizes by the business owner. Cloud computing allows the business owner to upload his or her sales records and data mining software onto a third-computing infrastructure, such as the Amazon EC2 cloud. By using the cloud, the business owner has access to computing power well beyond what is available on his or her private infrastructure and he or she only pays for the computing resources and that are actually used.
Despite the advantages to cloud computing, significant barriers to its adoption exist for many would-be customers. Because the infrastructure is generally controlled and managed by the provider, the customer is usually left with limited control and various security issues. Typically, a customer's control may be limited to starting, stopping, and booting the customer's virtual servers, and control of some local area network or virtual local area network security parameters with respect to network port ingress and egress. Consequently, the customer is restricted to the protocols supported by the cloud; key network and topology parameters, for example, addressing, encryption, routing, and enabling multicast protocols are thus beyond the customer's control. As a result, the customer's software may not work in a cloud computing environment without modification, if at all.
For example, a software application that expects to find its database server at IP address 10.0.0.1 will not function properly if the cloud assigns a different IP address to the database server. If the customer cannot change the IP address that the cloud assigns, the customer must rewrite and/or reconfigure the software application to look for the database server at the cloud-assigned IP address. In many instances, the costs of modifying the application to run in the cloud will outweigh the benefits of employing cloud computing, or at a minimum the costs will reduce the net benefits.
This lack of control poses a further barrier for would-be customers who wish to move their applications to a cloud computing environment. Specifically, the customer may lose control of the security of their data as it moves around the cloud computing environment. This poses a significant problem to anyone wanting to place confidential or sensitive data into a cloud computing environment.
For all the above reasons there is a need for a system that can both allow customers to run their applications in the cloud without modification to the application and to manage the security of their data in the cloud. The present invention satisfies these needs.